//
// Created by fh on 2021/6/21.
//

#ifndef CDEMO_RBTREE_H
#define CDEMO_RBTREE_H

#include <stdio.h>
#include <stdlib.h>
#include "CustomDefine.h"

/* 红黑树 */
typedef enum {
    red = 1,
    black = 2
} Color;

/* 红黑树结点定义 */
typedef struct rbTreeNode {
    int value; /* 结点值:可以用 void * 抽象成其他数据类型 */
    Color color; /* 颜色 */
    struct rbTreeNode *leftChild; /* 左孩子结点 */
    struct rbTreeNode *rightChild; /* 右孩子结点 */
    struct rbTreeNode *father; /* 父结点 */
} RBTreeNode;

/* 插入结点 */
Status RBTreeInsert(RBTreeNode **root,int data);
/* 查找值为data的结点 */
Status RBTreeSelect(RBTreeNode *root,int data,RBTreeNode **findNode);
/* 删除结点 */
Status RBTreeDelete(RBTreeNode **root,int data);
/* 遍历红黑树:不能修改根节点的属性值 */
void RBTreeDispaly(const RBTreeNode *node);

/* 红黑树demo */
void RBTreeDemo();

#endif //CDEMO_RBTREE_H
